#! /usr/bin/perl

#  NCVCで出力したNCコードをレーザー加工機用に変換するスクリプト  #
#   G01でZ軸マイナス方向に切り込むコードを$ON_Code、             #
#   G00またはG01でZ軸プラス方向に待避するコードを$OFF_Code       #
#  に変換する                                                    #
#  G90のコードのみ対応                                           #

#  使い方のコツ                                                  #
#  (1)NC生成オプションの切削原点(G92)のZ値とR点を                #
#     正(プラス)の同じ値にする(両方ゼロでもＯＫ)                 #
#  (2)切り込みをマイナス値にする                                 #
#  (3)標準カスタムヘッダーをレーザ用にカスタム                   #
#     {G90orG91}G54{G92_Initial} → {G90orG91}G92{G92X}{G92Y}    #
#     {Spindle}M3                → 削除                         #
#  この切削条件で生成したNCコードを、このスクリプトで変換すると  #
#  Z値の上下に合わせてレーザ出力のON/OFFが制御できます           #


#######################

#レーザーをオンにするコード
$ON_Code = 'M03';

#レーザーをオフにするコード
$OFF_Code = 'M05';

#######################


$pre_file= $ARGV[0];
$out_file= $ARGV[1];
open(IN,$pre_file);
open(OUT,">$out_file");


$G0X = -1;
$Zn=1000;
$Zp=1000;

while(<IN>){

	if(!/^N?[0-9\s]*[\(\%]/){

		if(/G0*?([0123])[A-Z\s]/){ $G0X= $1; }

		if($G0X != -1){
			if(/Z([0-9\-\.]+)/){ $Zn = $1; }
		}

		if($G0X == 1 && $Zn < $Zp){
			$_ = $ON_Code . "\nG01";
			$Zp = $Zn;
		}
		elsif(($G0X == 0 or $G0X == 1) && $Zn > $Zp){
			$_ = $OFF_Code . "\nG0" . $G0X;
			$Zp = $Zn;
		}
	}

	print OUT;

}